﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Datos;
using Negocio.clases_tontas;

namespace Negocio.catalogos
{
    public class catalogoUsuario
    {
        ControlAsistenciaEntities _db = new ControlAsistenciaEntities();

        public List<usuario> consultarUsuariosALL()
        {
            List<usuario> _objUsuarios = new List<usuario>();

            try
            {
                foreach (var item in _db.procConsultarUsuario())
                {
                    _objUsuarios.Add(new usuario(item.documento, (int)item.idDocente, item.detalle, item.Año, (int)item.idCarrera));
                }
                return _objUsuarios;
            }
            catch (Exception)
            {
                return _objUsuarios;
            }
            
        }

        public List<usuario> consultarUsuariosDesactivados()
        {
            List<usuario> _objUsuarios = new List<usuario>();

            try
            {
                foreach (var item in _db.procConsultarUsuarioDesactivados())
                {
                    _objUsuarios.Add(new usuario(item.documento, (int)item.idDocente, item.detalle, item.Año));
                }
                return _objUsuarios;
            }
            catch (Exception)
            {
                return _objUsuarios;
            }

        }

        public usuario consultarUsuariosXDocumento(string _documento)
        {
            usuario _objUsuarios = null;

            try
            {
                var resultUsuario = _db.procConsultarUsuarioXIDdocente(_documento).First();
                if (resultUsuario != null)
                {
                    _objUsuarios = new usuario(resultUsuario.idUsuario, resultUsuario.documento, (int)resultUsuario.idDocente, resultUsuario.as_tipo, resultUsuario.Año, (bool)resultUsuario.estado, (int)resultUsuario.idCarrera);
                }
                return _objUsuarios;
            }
            catch (Exception)
            {
                return _objUsuarios;
            }
        }

        public usuario consultarUsuariosAdmin(string _documento, string _clave)
        {
            usuario _objUsuarios = null;

            try
            {
                var resultUsuario = _db.procConsultarAdmin(_documento,_clave).FirstOrDefault();
                if (resultUsuario != null)
                {
                    _objUsuarios = new usuario ( resultUsuario.documento,resultUsuario.nombreApellido );
                }
                return _objUsuarios;
            }
            catch (Exception)
            {
                return _objUsuarios;
            }
        }

        public usuario consultarCoordinador(int _semestre, int _idCarrera)
        {
            usuario _objUsuarios = null;
            string _anio = "";
            switch (_semestre)
            {
                case 1: _anio = "PRIMER";
                    break;
                case 2: _anio = "PRIMER";
                    break;
                case 3: _anio = "SEGUNDO";
                    break;
                case 4: _anio = "SEGUNDO";
                    break;
                case 5: _anio = "TERCER";
                    break;
                case 6: _anio = "TERCER";
                    break;
                case 7: _anio = "CUARTO";
                    break;
                case 8: _anio = "CUARTO";
                    break;
                case 9: _anio = "QUINTO";
                    break;
                case 10: _anio = "QUINTO";
                    break;
                default:
                    break;
            }

            try
            {
                var resultUsuario = _db.procConsultarUsuarioXCarrera(_idCarrera).Where(V => V.Año == _anio).FirstOrDefault();
                if (resultUsuario != null)
                {
                    _objUsuarios = new usuario(resultUsuario.documento, (int)resultUsuario.idDocente, resultUsuario.detalle, resultUsuario.Año, (int)resultUsuario.idCarrera);
                }
                return _objUsuarios;
            }
            catch (Exception)
            {
                return _objUsuarios;
            }

        }

        public string agregarUusuario(string _documento, int _idTipo, int _idDocente,string _anio, int _idCarrera)
        {
            try
            {
                _db.procAgregarUsuario(_documento, _idDocente, _idTipo, _anio, _idCarrera);
                return "Usuario Ingresado";
            }
            catch (Exception)
            {
                return "Error al ingresar usuario, intentelo de nuevo.";
            }
        }

        public bool modificarEstadoUsuario(int _idDocente , bool _estado)
        {
            try
            {
                _db.procCambiarEstadoUsuario(_estado, _idDocente);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        public string modificarAnioUsuario(int _idDocente , string _anio)
        {
            try
            {
                _db.procCambiarAñoUsuario(_anio, _idDocente);
                return "Cambiado año correctamente";
            }
            catch (Exception)
            {
                return "Error al modificar año.";
            }
        }
    }
}
